/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.web.wizards.beanjsp.model; import org.netbeans.modules.web.wizards.beanjsp.util.*; import org.netbeans.modules.web.util.*; import org.netbeans.modules.web.wizards.beanjsp.ide.netbeans.*; import java.io.*; import java.net.*; import java.util.*; /** * all the template tags we should have in the page * */ public class JSPPageTemplate extends Object { /** * These are the elements ( tokens ) in this order we will find in any template * that we use to generate the JSP file. */ public static final String BEGIN_PAGE_DIRECTIVE = "<!-- $$BEGIN PAGE DIRECTIVE -->"; // NOI18N public final static String END_PAGE_DIRECTIVE = "<!-- $$END PAGE DIRECTIVE -->"; // NOI18N public static final String BEGIN_USE_BEAN = "<!-- $$BEGIN USE BEAN -->"; // NOI18N public static final String END_USE_BEAN = "<!-- $$END USE BEAN -->"; // NOI18N public static final String BEGIN_INPUT_DATA = "<!-- $$BEGIN POST/GET VALIDATION -->"; // NOI18N public static final String END_INPUT_DATA = "<!-- $$END POST/GET VALIDATION -->"; // NOI18N public static final String BEGIN_BIZ_METHODS = "<!-- $$BEGIN EXEC BIZ METHODS -->"; // NOI18N public static final String END_BIZ_METHODS = "<!-- $$END EXEC BIZ METHODS -->"; // NOI18N public static final String BEGIN_DYNAMIC_FORM = "<!-- $$BEGIN DYNAMIC FORM -->"; // NOI18N public static final String END_DYNAMIC_FORM = "<!-- $$END DYNAMIC FORM -->"; // NOI18N //// default template names public final static String DEF_JSPPAGE_TLT = "Default JSP Page"; // NOI18N public final static String DEF_INPUT_TLT = "Input Page"; // NOI18N public final static String DEF_RESULT_TLT = "Result Page"; // NOI18N public final static String DEF_ERROR_TLT = "Error JSP Page"; // NOI18N public final static String DEF_IO_TLT = "Input/Result Page"; // NOI18N //// default template name files public final static String DEF_JSPPAGE_TLT_FILE = "/org/netbeans/modules/web/wizards/beanjsp/resources/tlt/DefJSPPage.tlt"; // NOI18N public final static String DEF_INPUT_TLT_FILE = "/org/netbeans/modules/web/wizards/beanjsp/resources/tlt/InputPage.tlt"; // NOI18N public final static String DEF_RESULT_TLT_FILE = "/org/netbeans/modules/web/wizards/beanjsp/resources/tlt/ResultPage.tlt"; // NOI18N public final static String DEF_ERROR_TLT_FILE = "/org/netbeans/modules/web/wizards/beanjsp/resources/tlt/ErrorPage.tlt"; // NOI18N public final static String DEF_IO_TLT_FILE = "/org/netbeans/modules/web/wizards/beanjsp/resources/tlt/IOPage.tlt"; // NOI18N //// other variables String jspTemplateFileName; StringBuffer pageDirectiveBuffer; StringBuffer useBeanBuffer; StringBuffer inputDataBuffer; StringBuffer bizMethodsBuffer; StringBuffer dynamicFormBuffer; StringBuffer templateEndBuffer; CharArrayWriter pageDirectiveWriter; CharArrayWriter useBeanWriter; CharArrayWriter inputDataWriter; CharArrayWriter bizMethodsWriter; CharArrayWriter dynamicFormWriter; String templateData = new String(); /** Constructor */ public JSPPageTemplate() { resetTemplateWriters(); resetTemplateBuffers(); } public void resetTemplateBuffers() { pageDirectiveBuffer = new StringBuffer(); useBeanBuffer = new StringBuffer(); inputDataBuffer = new StringBuffer(); bizMethodsBuffer = new StringBuffer(); dynamicFormBuffer = new StringBuffer(); templateEndBuffer = new StringBuffer(); templateData = new String(); } public void resetTemplateWriters() { pageDirectiveWriter = createCharArrayWriter(); useBeanWriter = createCharArrayWriter(); inputDataWriter = createCharArrayWriter(); bizMethodsWriter = createCharArrayWriter(); dynamicFormWriter = createCharArrayWriter(); } private CharArrayWriter createCharArrayWriter() { return new CharArrayWriter (); } private PrintWriter createPrintWriter(Writer out) { return new PrintWriter(out,true); } public PrintWriter getPageDirectiveWriter() { return createPrintWriter(pageDirectiveWriter); } public PrintWriter getUseBeanWriter() { return createPrintWriter(useBeanWriter); } public PrintWriter getInputDataWriter() { return createPrintWriter(inputDataWriter); } public PrintWriter getBizMethodsWriter() { return createPrintWriter(bizMethodsWriter); } public PrintWriter getInputFormWriter() { // return createPrintWriter(inputFormWriter); return getDynamicFormWriter(); //// backward compatibility } public PrintWriter getResultFormWriter() { return getDynamicFormWriter(); //// backward compatibility } public PrintWriter getDynamicFormWriter() { return createPrintWriter(dynamicFormWriter); } public int makeTemplateDataChunk(StringBuffer chunkBuffer, String token, int startIdx) { int idx = -1; idx = templateData.indexOf(token); if(idx >= 0 ) { chunkBuffer.append(templateData.substring(startIdx,idx+token.length())); return idx+token.length(); }else return startIdx; } public void createTemplateDataChunks() { int startIdx = 0; startIdx = makeTemplateDataChunk(pageDirectiveBuffer,END_PAGE_DIRECTIVE,startIdx); startIdx = makeTemplateDataChunk(useBeanBuffer,END_USE_BEAN,startIdx); startIdx = makeTemplateDataChunk(inputDataBuffer,END_INPUT_DATA,startIdx); startIdx = makeTemplateDataChunk(bizMethodsBuffer,END_BIZ_METHODS,startIdx); startIdx = makeTemplateDataChunk(dynamicFormBuffer,END_DYNAMIC_FORM,startIdx); templateEndBuffer.append(templateData.substring(startIdx)); } public void applyDynamicDataToTemplateDataChunk(StringBuffer chunkBuffer, String token, CharArrayWriter charWriter) { int chunkLen = chunkBuffer.length(); int tokenLen = token.length(); if(chunkLen > 0 && chunkLen >= tokenLen ) { chunkBuffer.insert(chunkLen-tokenLen,charWriter.toString()); } } public void applyDynamicDataFromWriters() { applyDynamicDataToTemplateDataChunk(pageDirectiveBuffer,END_PAGE_DIRECTIVE,pageDirectiveWriter); applyDynamicDataToTemplateDataChunk(useBeanBuffer,END_USE_BEAN,useBeanWriter); applyDynamicDataToTemplateDataChunk(inputDataBuffer,END_INPUT_DATA,inputDataWriter); applyDynamicDataToTemplateDataChunk(bizMethodsBuffer,END_BIZ_METHODS,bizMethodsWriter); applyDynamicDataToTemplateDataChunk(dynamicFormBuffer,END_DYNAMIC_FORM,dynamicFormWriter); } public void loadTemplateData(String templateFilePath) { try { File templateFile = new File(templateFilePath); FileReader templateReader = new FileReader(templateFile); loadTemplateData(templateReader); templateReader.close(); }catch(Exception ex) { Debug.print(ex);} } public void loadTemplateData(URL templateURL) { try { InputStreamReader templateReader = new InputStreamReader(templateURL.openStream()); loadTemplateData(templateReader); templateReader.close(); }catch(Exception ex) { Debug.print(ex);} } public void loadTemplateData(Reader templateReader) { try { StringBuffer templateDataBuffer = new StringBuffer(); int size = 0; char[] data = new char[1024]; for(;;) { size = templateReader.read(data); if(size <= 0 ) break; templateDataBuffer.append(data,0,size); } templateData = templateDataBuffer.toString(); createTemplateDataChunks(); templateData = new String(); // release memory }catch(Exception ex) { Debug.print(ex);} } public StringBuffer getJSPFileContent() { try { StringBuffer jspFileBuffer = new StringBuffer(); applyDynamicDataFromWriters(); jspFileBuffer.append(pageDirectiveBuffer.toString()); jspFileBuffer.append(useBeanBuffer.toString()); jspFileBuffer.append(inputDataBuffer.toString()); jspFileBuffer.append(bizMethodsBuffer.toString()); jspFileBuffer.append(dynamicFormBuffer.toString()); jspFileBuffer.append(templateEndBuffer.toString()); return jspFileBuffer; }catch(Exception ex) { Debug.print(ex);} return null; } public void saveAs(Writer jspFileWriter) { try { StringBuffer jspFileBuffer = getJSPFileContent(); if(jspFileBuffer != null) { jspFileWriter.write(jspFileBuffer.toString()); }else { // Debug.println("Fatal Error: No JSP Content"); } jspFileWriter.close(); }catch(Exception ex) { Debug.print(ex);} } public void saveAs(File jspFile) { try { FileWriter jspFileWriter = new FileWriter(jspFile); saveAs(jspFileWriter); }catch(Exception ex) { Debug.print(ex);} } public void saveAs(String jspFilePath) { try{ File jspFile = new File(jspFilePath); saveAs(jspFile); }catch(Exception ex) { Debug.print(ex);} } public void saveAsInRepository(String name, String ext,boolean overwrite) { try { //NB here take IDE repository help to save the file StringBuffer jspContent = getJSPFileContent(); IDEHelper.saveJSPFileAs(name,ext,jspContent,overwrite); //FileWriter jspFileWriter = new FileWriter(jspFile); //saveAs(jspFileWriter); }catch(Exception ex) { Debug.print(ex);} } public static Vector getAvailableTemplates() { // return new Vector(); Vector templates = new Vector(); try { Class templateClass = JSPPageTemplate.class; JSPPageTemplate tlt = new JSPPageTemplate(); Enumeration templateURLs = tlt.getClass().getClassLoader().getResources("org/netbeans/modules/web/core/wizard/jasper/webapp/model/*.tlt"); // NOI18N for(;templateURLs.hasMoreElements(); ) { URL templateURL = (URL)templateURLs.nextElement(); templates.add(templateURL.getFile()); } }catch(Exception ex){Debug.print(ex);} return templates; } public Reader getTemplateReader(String name) { try { Reader templateReader = new InputStreamReader(this.getClass().getResourceAsStream(name)); return templateReader; }catch(Exception ex) { Debug.print(ex);} return null; } public Reader getDefaultTemplate() { return getTemplateReader(DEF_JSPPAGE_TLT_FILE); } public Reader getDefaultInputPageTemplate() { return getTemplateReader(DEF_INPUT_TLT_FILE); } public Reader getDefaultResultPageTemplate() { return getTemplateReader(DEF_RESULT_TLT_FILE); } public Reader getDefaultErrorPageTemplate() { return getTemplateReader(DEF_ERROR_TLT_FILE); } public Reader getDefaultIOPageTemplate() { return getTemplateReader(DEF_IO_TLT_FILE); } public static String getPageTemplateFileName(String tltDisplayName) { // Debug.println("Comparing template Disp Name "+tltDisplayName); if(tltDisplayName.equals(DEF_INPUT_TLT)) return DEF_INPUT_TLT_FILE; else if(tltDisplayName.equals(DEF_RESULT_TLT)) { return DEF_RESULT_TLT_FILE; }else if(tltDisplayName.equals(DEF_ERROR_TLT)) { return DEF_ERROR_TLT_FILE; }else if(tltDisplayName.equals(DEF_IO_TLT)) { return DEF_IO_TLT_FILE; }else { // Debug.println("Returning default!!! for "+tltDisplayName); return DEF_JSPPAGE_TLT_FILE; } } public static Vector getPageTemplateNames() { Vector tltNames = new Vector(); tltNames.addElement(DEF_JSPPAGE_TLT); tltNames.addElement(DEF_INPUT_TLT); tltNames.addElement(DEF_RESULT_TLT); tltNames.addElement(DEF_ERROR_TLT); tltNames.addElement(DEF_IO_TLT); return tltNames; } public static void main(String[] args) { } }